package com.health.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.health.entity.Doctor;
import com.health.entity.pojo.dto.DoctorDTO;
import com.health.entity.pojo.vo.ConsultingroomVO;
import com.health.entity.pojo.vo.DoctorVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author cl
 * @since 2023-04-15
 */
@Mapper
public interface DoctorMapper extends BaseMapper<Doctor> {

    //[添加]医生时，为'所属医院'下拉框赋值([展示](查询)出所有医院id、名字
    @Select("SELECT id,name FROM hospital")
    List<Doctor> getAllHospitalNameAndId();


    //[添加]医生时，为'所属科室'下拉框(2个)分别赋值([展示](查询)出所有一级科室名称、二级科室名称)
//    @Select("SELECT name FROM consultingroom WHERE parent_id = #{parentId}")
    @Select("SELECT id,name FROM consultingroom WHERE parent_id = #{parentId}")
    List<ConsultingroomVO> getConsultingroom(@Param("parentId") Long parentId);

    //[添加/修改]、[编辑]医生时，根据'二级科室'的编号id值，查询出其所属'一级科室'的编号id值
    @Select("SELECT parent_id FROM consultingroom WHERE id = #{child}")
    Integer getOneId(@Param("child") Long childId);

    //条件[查询]时，通过输入的医院编号hospital_id的值，查询出对应医院的name名
//    @Select("SELECT name FROM hospital WHERE id = #{hid}")
//    String getHospitalNameById(@Param("hid") Integer hospitalId);

    //条件[查询]时，通过输入的医院name的模糊名，查询出对应医院的id值
//    @Select("SELECT id FROM hospital WHERE name = #{likeNm}")
//    Integer getHospitalIdByLikeName(@Param("likeNm") String likeName);

//    List<Doctor> getDoctorByConditions(@Param("doctorDTO") DoctorDTO dDTO);
    Page<DoctorVO> getDoctorByConditions(IPage<DoctorVO> doctorIPage , @Param("doctorDTO") DoctorDTO dDTO);

    //根据查出的一级科室的id值、二级科室的id值，查询出一级科室、二级科室的名称
    //查出一级科室名称
    @Select("SELECT name FROM consultingroom WHERE id = #{pid}")
    String getParentConsultingroomName(@Param("pid") Integer parentId);
    //查出二级科室名称
    @Select("SELECT name FROM consultingroom WHERE id = #{cid}  AND  parent_id != 0")
    String getChildConsultingroomName(@Param("cid") Long childId);


//    @Update("UPDATE FROM doctor SET status = #{snum} WHERE id = #{idOrids}")
//    @Update("UPDATE doctor SET status = #{snum} WHERE id = #{idOrids}")
////    Integer changeStatus(@Param("idOrids") Integer...ids,  @Param("snum") Integer statusNum);     【问】
//    Integer changeStatus(@Param("snum") Integer statusNum, @Param("idOrids") Integer ids);

    //【是否上架】、【上架】、【下架】三个按钮共同触发——将SQL表doctor内的属性status的值改变(【易错：不能用set方法改变！否则仅改变java层面而非MySQL层面】)
    @Update("UPDATE doctor SET status = #{snum} WHERE id = #{doctorId}")
//    Integer changeManyStatus(@Param("snum") Integer statusNum, @Param("idOrids") Integer...ids);  【易错:可变参数是单个逐个传递进行操作，故不能用数组类型的参数在此接收】
    Integer changeStatus(@Param("snum") Integer statusNum, @Param("doctorId") Integer did);

}
